package com.ruijie.acl.service;

import java.util.List;

import com.ruijie.acl.AccessGroup;
import com.ruijie.acl.AclDevice;
import com.ruijie.acl.AclDeviceAccessGroup;
import com.ruijie.emp.device.Device;
import com.ruijie.foundation.annotation.DomainService;
import com.ruijie.foundation.dao.support.Page;
import com.ruijie.foundation.service.Repository;

/**
 * <p>
 * Title: ACL设备与ACL组关联的服务接口类
 * </p>
 * <p>
 * Description: 为ACL组和ACL设备关联关系提供逻辑处理，以及数据库的操作。
 * </p>
 * <p>
 * Copyright: Copyright (c) 2008
 * </p>
 * <p>
 * Company: Ruijie Co., Ltd.
 * </p>
 * <p>
 * Create Time: 2009-07-15
 * </p>
 * <p>
 * Update Time:
 * </p>
 * <p>
 * Updater:
 * </p>
 * <p>
 * Update Comments:
 * </p>
 * @author ASAI
 */
@DomainService
public interface DeviceAccessGroupService extends Repository<AclDeviceAccessGroup>{
	
	/**
	 * 根据ACL组分页查询ACL设备
	 * @param entity　ACL组
	 * @param pageNo　页数
	 * @param pageSize　每面显示的记录数
	 * @return　ACL设备
	 */
	public Page pageQueryByAccessGroup(AccessGroup entity, int pageNo, int pageSize);
	
	/**
	 * 根据ACL设备分页查询ACL组
	 * @param entity　ACL设备
	 * @param pageNo　页数
	 * @param group　ACL组
	 * @param pageSize　每面显示的记录数
	 * @return　ACL组
	 */
	public Page pageQueryByAclDevice(AclDevice entity, AccessGroup accessGroup,int pageNo, int pageSize);
	
	/**
	 * 根据ACL设备和ACL组取得关系对象
	 * @param aclDevice ACL设备
	 * @param accessGroup ACL组
	 * @return 关系对象
	 */
	public AclDeviceAccessGroup getByAclDeviceAndAccessGroup(AclDevice aclDevice, AccessGroup accessGroup);
	
	/**
	 * 根据ACL组取得所有ACL设备与ACL组关系
	 * @param entity ACL组
	 * @return ACL设备与ACL组关系
	 */
	public List<AclDeviceAccessGroup> getByAccessGroup(AccessGroup entity);
	
	/**
	 * 根据ACL设备取得所有ACL设备与ACL组关系
	 * @param entity ACL设备
	 * @return ACL设备与ACL组关系
	 */
	public List<AclDeviceAccessGroup> getByAclDevice(AclDevice entity);
	
	/**
	 * 根据ACL设备删除ACL设备与ACL组关系
	 * @param aclDevice ACL设备
	 */
	public void deleteByAclDevice(AclDevice aclDevice);
	
	/**
	 * 根据ACL组判断是否存在ACL设备与ACL组关系
	 * @param entity ACL组
	 * @return 是否存在ACL设备与ACL组关系
	 */
	public boolean existByAccessGroup(AccessGroup entity);
	
	/**
	 * 根据ACL组判断是否存在修改标志位为已修改的ACL设备与ACL组关系
	 * @param entity ACL组
	 * @return 是否存在ACL设备与ACL组关系
	 */
	public boolean existByAccessGroupAndChanged(AccessGroup entity);
	
	/**
	 * 根据ACL组更新关系的修改标志位
	 * @param entity ACL组
	 */
	public void updateChangedByAccessGroup(AccessGroup entity);
	
	/**
	 * 根据ACL组更新关系的修改标志位
	 * 
	 * @param entity
	 *            ACL组
	 */
	public void updateChangedByAccessGroup(AccessGroup entity,boolean isChanged,AclDevice aclDevice);
	
	
	
	/**
	 * 添加设备与组的关系
	 * @param accessGroupList 组列表
	 * @param device 设备
	 */
	public void addAccessGroupDevices(List<AccessGroup> accessGroupList,Device device) throws Exception;
	
	/**
	 * 取得与组关联并且不一致的ACL设备
	 * @param entity ACL组
	 * @return 
	 */
	public List<AclDeviceAccessGroup> findByAccessGroupAndChanged(AccessGroup entity);

	/**
	 * 根据ACL设备取得ACL组
	 * @param entity ACL设备
	 * @return ACL组列表
	 */
	public List<AccessGroup> getAccessGroupByAclDevice(AclDevice entity);
	
	/**
	 * 根据ACL设备分页查询ACL组
	 * @param entity　ACL设备
	 * @param pageNo　页数
	 * @param pageSize　每面显示的记录数
	 * @return　ACL组
	 */
	public Page pageQueryByAclDeviceGroup(AclDevice entity,AccessGroup group, int pageNo, int pageSize);
}
